package array

import "sync"

// Paralle 并行对切片进行迭代，使用回调函数进对切片元素进行处理
func Paralle[T any](n int, s []T, f func(T)) {
	var wg sync.WaitGroup
	sem := make(chan struct{}, n)
	for _, elem := range s {
		sem <- struct{}{}
		wg.Add(1)
		go func(e T) {
			defer func() {
				<-sem
				wg.Done()
			}()
			f(e)
		}(elem)
	}
	wg.Wait()
}
